/*
   Copyright (c) 2023 李伟国
   learner-platform is licensed under Mulan PSL v2.
   You can use this software according to the terms and conditions of the Mulan PSL v2. 
   You may obtain a copy of Mulan PSL v2 at:
               http://license.coscl.org.cn/MulanPSL2 
   THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.  
   See the Mulan PSL v2 for more details. 
*/

package cn.platform.service;

import cn.platform.entity.Essay;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

public interface IEssayService extends IService<Essay> {

    /**
     * 发布文章
     * @param essay 文章
     * @return 是否保存成功
     */
    Boolean releaseArticle(Essay essay);

    /**
     * 保存文章为草稿
     * @param essay 文章
     * @return 是否保存成功
     */
    Boolean draftArticle(Essay essay);

    /**
     * 保存题解
     * @param essay 题解
     * @return 是否保存成功
     */
    Boolean saveNote(Essay essay);

    /**
     * 通过分类查找文章
     * @param classification 类别
     * @return 文章列表
     */
    Page<Essay> findArticleListByClassification(String... classification);

    /**
     * 通过标签查找文章
     * @param label 标签
     * @return 文章列表
     */
    Page<Essay> findArticleListByLabel(String... label);

    /**
     * 通过作者id查找文章
     * @param authorId 作者id
     * @return 文章列表
     */
    Page<Essay> findArticleListByAuthorId(Long authorId);


    /**
     * 作者查看自己的文章
     * @param authorId 作者id
     * @return 文章列表
     */
    Page<Essay> findArticleListByAuthorIdPrinciple(Long authorId);

    /**
     * 通过分类查找题解
     * @param classification 分类
     * @return 题解列表
     */
    Page<Essay> findNoteListByClassification(String... classification);

    /**
     * 通过标签查找题解
     * @param label 标签
     * @return 题解列表
     */
    Page<Essay> findNoteListByLabel(String... label);

    /**
     * 通过作者id查找题解
     * @param authorId 作者id
     * @return 题解列表
     */
    Page<Essay> findNoteListByAuthorId(Long authorId);

    /**
     * 删除文章
     * @param essay 文章
     * @return 是否删除成功
     */
    Boolean deleteEssay(Essay essay);
    Page<Essay> findEssayList();

    Page<Essay> findArticleByHeadline(String headline);

    /**
     * 返回推荐文章
     * @return 推荐文章
     */
    Page<Essay> findArticleRecommend();
}
